package controlador;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import java.util.ArrayList;
import java.util.HashMap;


import java.util.Map;



import modelo.Cliente;
import modelo.Fornecedor;
import modelo.Produto;


public class ControleEstoque {
	
	Map<String, Produto> cadastroProdutos;
	Map<Integer, Fornecedor> cadastroFornecedor;
	Map<Integer, Cliente> cadastroCliente;
	
	private static ControleEstoque instanciaUnica = null;
	
	public static ControleEstoque getInstance() throws FileNotFoundException, IOException, ClassNotFoundException{
		if (instanciaUnica == null){
			instanciaUnica = new ControleEstoque();			
		}
		return instanciaUnica;
	}
	private ControleEstoque() throws FileNotFoundException, IOException, ClassNotFoundException{
		cadastroProdutos = carregarProduto();
		//cadastroProdutos= new HashMap<String,Produto> ();
		//cadastroTurmas = new HashMap<String,Turma> ();
	}
	
	public void criarProduto(String descricao, Double preco, Double desconto, String codigoDeBarras, String tipo, String marca, Integer qtdEstoque) throws CodigoDeBarrasDuplicadoException, FileNotFoundException, IOException, ClassNotFoundException {  
		
		if (cadastroProdutos.containsKey(codigoDeBarras)){
			throw new CodigoDeBarrasDuplicadoException();
		}
		
		Produto produto = new Produto(descricao, preco, desconto, codigoDeBarras, tipo, marca, qtdEstoque);
		cadastroProdutos.put(codigoDeBarras, produto); //trocar dre pelo codigo de barras
		
		salvarProduto(cadastroProdutos);
	}
	
	public void salvarProduto(Map<String, Produto> cadastroProdutos) throws FileNotFoundException, IOException, ClassNotFoundException{
		
		//cadastroProdutos = carregarProduto();
		ObjectOutputStream objectOut = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("produtos.dat")));              
		objectOut.writeObject(cadastroProdutos);  
		objectOut.close(); 
		
	}
	public ArrayList<Produto> listaTodosProdutosPorNome() throws FileNotFoundException, IOException, ClassNotFoundException {
		ArrayList<Produto> produtos = new ArrayList<Produto>();
		produtos.addAll(carregarProduto().values());
		//Collections.sort(alunos,new ComparadorDeAlunosPorNome());		
		return produtos;
	}
	
	@SuppressWarnings("unchecked")
	public Map<String, Produto> carregarProduto() throws FileNotFoundException, IOException, ClassNotFoundException{
		try{
			ObjectInputStream objectIn = new ObjectInputStream(new BufferedInputStream(new FileInputStream("produtos.dat")));  
			Map<String, Produto> cadastroProdutos = (Map<String, Produto>) objectIn.readObject();  
			objectIn.close();  
			return cadastroProdutos; 
		}
		catch(FileNotFoundException e){
			
			return new HashMap<String, Produto> () ;
			
		}
		
		
	}

	
	
}
